26. 练习 — 嵌套循环

练习 — 嵌套循环

我们已经见过可以将一个循环放入另一个循环里,如下所示:

for side in [1, 2, 3, 4]:
    paul.forward(100)
    paul.right(90)
    for side in [1, 2, 3, 4]:
        paul.forward(10)
        paul.right(90)

如果你还记得的话,这个循环画出一个很大的方形,四角有一个很小的方形:

一开始这样编写嵌套循环可能比较难,我们练习下吧。以下 workspace 中具有绘制三个彩色短线的代码(就同你刚刚处理过的代码一样)。如果我们想画出三个彩色图形,而不是三个短线呢?

在当前代码中,每次循环运行时, amy 只是向前移动。你可以将代码行 amy.forward(50) 替换为完整的第二个 for 循环!你可以使用该循环让 amy 画一个方形(或任何你想要的图形)。

for prettycolor in ["red", "orange", "yellow"]:
    amy.color(prettycolor)
    amy.forward(50) #用 for 循环取代该行代码
    amy.penup()
    amy.forward(50)
    amy.pendown()

你的目标是使用嵌套循环画出多个形状,如下所示:

请在下面的 workspace 中尝试一下。

(如果遇到问题,请在 workspace 下方查找我们的解决方案。)

Workspace

This section contains either a workspace (it can be a Jupyter Notebook workspace or an online code editor work space, etc.) and it cannot be automatically downloaded to be generated here. Please access the classroom with your account and manually download the workspace to your local machine. Note that for some courses, Udacity upload the workspace files onto https://github.com/udacity , so you may be able to download them there.

Workspace Information:

  • Default file path:
  • Workspace type: html-live
  • Opened files (when workspace is loaded): n/a

备注 :如果你无法打开上面的workspace,请去 这里


## ⚠️ 剧透! **下面是我们的解决方案。**如果你能认真完成练习,然后再将你的代码与我们的代码进行对比,学习效果将更好!

----

解决方案

下面是我们的解决方案。注意,我们还调整了不绘制时 amy 移动的距离,以便在形状之间留点空间。

import turtle

amy = turtle.Turtle()

# Make the width thicker so that the line will be easier to see
# 使线条宽度加粗,以便更容易看到线条
amy.width(5)

# Move back without drawing anything
# 向后移动且不画任何东西
amy.penup()
amy.forward(-140)
amy.pendown()

# Draw three shapes of different colors, with space in between
#绘制三种不同颜色的形状,形状间用空格间隔
for prettycolor in ["red", "orange", "yellow"]:
    amy.color(prettycolor)
    for side in [1, 2, 3, 4]:
        amy.forward(50)
        amy.right(90)
    amy.penup()
    amy.forward(100)
    amy.pendown()